AN004 - Example of using and calibrating the EANPOS device

In this section we want to describe the first steps that will make the user in his first contact with the EANPOS device. Provides a simple example that uses the EANPOS device to implement an analog positioner.

We can divide in the following sections, the proceed of the operation:

Device declaration in the configuration unit

As was already explained in the description of the EANPOS device, you must program properly the unit application configuration. It is very important to the piece of code that declares the device, Here you should indicate the hardware resources to be used to ensure proper operation. It will be the responsibility of the programmer to pick and choose the most appropriate inputs and outputs. For example with the following line of code:

;--------------------------------- 
; Internal device declaration
;--------------------------------- 
INTDEVICE 
AxisX  EANPOS  2  2.CNT02 3 3.INP01  3.AN01

You define an EANPOS device with “AxisX” name where the sampling time is 2 ms. Have been declared the following hardware resources: the input to the bidirectional meter has address 2.CNT02 (where 2 indicates the slot the card is installed while CNT02 is the mnemonic name of the input), the number of digital input for interruption devoted to zero-pulse bidirectional counter (number 3), a digital input for capturing zero pulse (3.INP01) and the address of the analog output 3.AN01 that regulating the output voltage to manage a drive.

An application that has just inside the device Declaration in configuration unit and a qcl unit that it does not execute anything (unless forced to WAIT) already allows to execute the first operations using the capabilities of the device. After you have transferred the application in the system and having put in RUN, It can change the parameters, observe the States or give commands to devices using the appropriate monitor from QView.
This is very convenient in the early stages of planning when you just want to make some runs or debugging of an application.

Correct device parameterization

After declaring hardware resources properly to use you need to set some parameters as components that are connected to the Qmove product.

Introduction of measure and pulse

Let us consider the case where the bi-directional meter is a digital encoder. Suppose that this is directly keyed on an engine that is to move an axis. You will need to set the parameters correctly measure and pulse of the EANPOS device so that the latter can interpret the pulses of the meter and calculate the position of the axis.
The introduction of measure and pulse lets you match between a space in a unit of your choice and a certain number of pulses. In the event that the user already knows the space covered in a round encoder then you'll proceed directly to projecting values.
Let's clarify this concept with an example: if the encoder emits 1000 pulses/Rev and you know that the axis moves about 5 cm when the encoder performs exactly one revolution then you can enter the following values:

AxisX:measure = 50;
AxisX:pulse = 4000

The measure value introduced involves choosing a unit of measure of mm for measuring positions, in the pulse parameter introduces a value equal to the number of encoder impulses multiplied by 4. Remember that the relationship measure/pulse must be a value between 0.00935 to 1 (for precision limits of the device). It is important to emphasize that the values described above are taken as reference: It is not necessary to introduce the parameters with reference to an encoder revolution as we will describe below.

When the user does not know in advance the measurement parameters, will still be able to make the correct calibration by following these steps:

The encoder resolution is now correctly set.

Another important step to take is to set the maxpos and minpos parameters that define respectively the maximum and the minimum position accessible from axis.

Choice of speed unit measurement

The unit of measurement of the instantaneous speed of the axis it was chosen by using unitvel and decpt parameters. You can select the unit of time of speed with the unitvel parameter: if this is to 0 then the speed is measured in Um/min, if it is to 1 then the speed is measured in Um/s. The decpt parameter instead determines whether speed-measuring in multiples of the fundamental units Um. For example, if fundamental measurement units Um=mm, and unitvel=1 you get the speed indicator in the vel variable in:
mm/s (con decpt = 0),
cm/s (con decpt = 1),
dm/s (con decpt = 2),
m/s (con decpt = 3).
Afterwards, if necessary, you need to set the proper display on the terminal operator to adjust the correct decimal point position.

Analogue output calibration

:important:Attention:
before actual placement you must make sure that wiring and mechanical parts are not cause malfunctions.

We review the case where the EANPOS device you're using an analog output that is implemented with a DAC device: this will assume 16 bit resolution input discrete values (so between -32768 to 32767) to give analog voltage output range ±10V. This calibration function with analog output can be driven with a constant value in order to test links and functionality.

Preliminary motion

This section describes the operations to be carried out to verify the correctness of the connections and the functionality of the system which was built.

Parametrizzazione uscita analogica (impostazione parametro maxvel)

Il device EANPOS genera il valore di tensione dell'uscita analogica sulla base di una proporzione tra la velocità massima dell'asse e la massima tensione di uscita. Per fare ciò è necessario impostare il parametro maxvel, ovvero la velocità con cui si muove l'asse quando viene data tensione massima all'azionamento. Ovviamente l'asse deve avere un comportamento simmetrico rispetto al valore zero di tensione analogica, quindi la velocità deve essere la stessa (in modulo) alla tensione massima sia positiva che negativa.
Per conoscere la velocità massima esistono due vie: il “metodo teorico” presuppone di conosce la velocità massima impostata nell'azionamento da cui si può ricavare facilmente la velocità lineare.
Se non si è a conoscenza della velocità massima dichiarata del motore si deve procedere in questo modo:

Ora è quindi possibile introdurre il valore della velocità massima nel parametro maxvel.

Prima movimentazione

Attenzione:
prima di movimentare l'asse, verificare il corretto funzionamento dei dispositivi d'emergenza e protezione.

Le procedure fin qui descritte hanno permesso di completare la prima fase di parametrizzazione del device. Ora è possibile eseguire una semplice movimentazione dell'asse. Seguire ad esempio i seguenti passi:

Questa prima movimentazione è stata eseguita senza attivare l'anello di reazione di spazio, quindi qualsiasi errore introdotto da valori di tensione di offset o da agenti esterni non viene corretto.

Prima impostazione dei parametri del controllore PID

Fino ad adesso è stato spiegato come effettuare dei primi posizionamenti con l'anello di spazio aperto, vediamo ora come effettuare una prima calibrazione dei parametri PID.
Seguire questa procedura:

Utilizzo del device RECDATA per calibrare correttamente il controllore PID

Quando il programmatore intende regolare finemente i parametri del regolatore PID, egli può servirsi di un device interno (residente sul QMove) che permette di registrare dati del tipo: posizione in impulsi primari, posizioni virtuali asse, uscite analogiche, errori di inseguimento, stati di ingressi e uscite. Questo tool si chiama RECDATA e sfrutta la RAM della CPU del sistema QMove, perciò, quando viene impiegato, l'utilizzo della memoria dei dati non deve superare il 50% di quella totale.

Poiché gli effetti della regolazione PID producono manifestazioni molto difficili da apprezzare ad occhio nudo, il device RECDATA diventa molto utile quando si vogliono tarare parametri quali pgain, integt o derivt. Infatti fenomeni come l'overshoot o un rallentamento dovuto ad un valore eccessivo del tempo integrale devono essere tenuti in considerazione nella fase di parametrizzazione.

L'utilizzo di un device RECDATA risulta molto semplice, è sufficiente infatti che esso sia dichiarato correttamente nella unit di configurazione con una riga del tipo:

;--------------------------------- 
; Dichiarazione device interni 
;--------------------------------- 
INTDEVICE 
Recorder  RECDATA  TCamp  QCTL1  QCTL2  IOutA1  IOutA2  IntL1  IntL2  Ing1  Ing2  Out1  Out2

Il device è particolarmente indicato a monitorare le regolazioni di un device EANPOS infatti consente di visualizzare: i valori di posizione in impulsi primari (prendendo direttamente i dati provenienti dal contatore bidirezionale), i valori di posizione teorica che il generatore di profilo di velocità ha calcolato, i valori di una uscita analogica. L'utente può quindi comodamente accorgersi se i parametri che ha inserito sono corretti per le sue esigenze.
Il device RECDATA può registrare informazioni riguardanti due assi, per il nostro scopo è possibile dichiarare solo gli indirizzi relativi al primo asse lasciando a X.X gli altri.

Una descrizione più approfondita del device RECDATA si può trovare nella sezione apposita, qui ci limitiamo ad elencare i passi da seguire per utilizzarlo:

Nota:
il device RECDATA registra una notevole quantità di dati all'interno della RAM del prodotto QMove, al momento dell'acquisizione da parte del pc il trasferimento avviene via seriale. Questa operazione potrebbe risultare molto lunga a causa della bassa velocità intrinseca del protocollo di comunicazione seriale. L'utente quindi può adottare alcuni accorgimenti come:

  • prestare attenzione a registrare solo le variabili che necessitano effettivamente di essere monitorate
  • aumentare il tempo di campionamento del device RECDATA

Sviluppo di un applicativo che implementi un posizionatore

Nella sezione precedente è stato spiegato quali sono i primi passi da seguire per una procedura di movimentazione di un asse con un posizionatore analogico. Tale esempio impiega solo un ristretto spettro dei parametri impostabili del device, in questa sezione inseriamo un codice di esempio, dettagliatamente commentato, da cui l'utilizzatore può prendere spunto per sviluppare un applicativo. Il modo in cui il device va dichiarato è spiegato precedentemente, e perciò in questa sezione è omessa la unit di configurazione.Vedi qui

Questo applicativo utilizza 4 ingressi: 1 per avanti manuale, 1 per indietro manuale, 1 per comando di start ed 1 per comando di stop. Saranno disponibili la modalità di funzionamento manuale ed automatica: in manuale è possibile utilizzare i comandi di jog mentre in automatico è possibile far effettuare un posizionamento alla posizione ed alla velocità desiderata:

;*************************************************************************************
; Unit di configurazione (sono riportate solo le dichiarazioni di variabili e 
; sono omesse le dichiarazioni del bus e del device)
;*************************************************************************************
;-------------------------------------------------------------------------------------
; Definizione Variabili SYSTEM
;-------------------------------------------------------------------------------------
SYSTEM
slQuotaPos L                  ;Variabile per quota di posizionamento
slVelAsse L                   ;Variabile per velocità asse
;-------------------------------------------------------------------------------------
; Definizione Variabili GLOBAL
;-------------------------------------------------------------------------------------
GLOBAL
gfMovMan F                    ;Flag segnalazione movimenti manuali in corso
gfMovAuto F                   ;Flag segnalazione movimenti automatici in corso
;-------------------------------------------------------------------------------------
; Definizione Variabili INPUT
;-------------------------------------------------------------------------------------
INPUT
ifAvMan F 2.INP01             ;Ingresso di avanti manuale
ifInMan F 2.INP02             ;Ingresso di indietro manuale
ifStart F 2.INP03             ;Ingresso di START asse
ifStop  F 2.INP04             ;Ingresso di STOP asse
;-------------------------------------------------------------------------------------
; Definizione Variabili OUTPUT
;-------------------------------------------------------------------------------------
OUTPUT
ofToll F 2.OUT01              ;Uscita di asse in tolleranza
ofAxeFermo F 2.OUT02          ;Uscita di asse fermo
 
;*************************************************************************************
; Unit qcl
;*************************************************************************************
;-------------------------------------------------------------------------------------
; Operazioni di parametrizzazione del device
;-------------------------------------------------------------------------------------
Asse:measure = 10000        
Asse:pulse = 40000            ;come calcolare measure e pulse è spiegato nel paragrafo apposito.*
Asse:maxvel = 100000          ;come calcolare maxvel è spiegato nel paragrafo apposito.*
Asse:maxpos = 999999          ;Quota massima
Asse:minpos = -999999         ;Quota minima
Asse:maxfollerr = 10000       ;Errore di inseguimento massimo
Asse:unitvel = 0              ;Unità di tempo della velocità (velocità in Um/min)
Asse:decpt = 0                ;Cifre decimali nel calcolo della velocità
Asse:rampmode = 0             ;Tipo di rampe utilizzate (in questo caso stesso tempo di accelerazione 
                              ;o decelerazione da velocità zero a velocità massima)
Asse:taccdec = 100            ;Tempo di accelerazione e di decelerazione
Asse:pgain = 10               ;Guadagno proporzionale
Asse:feedfw = 1000            ;Feedforward
 
INIT Asse                     ;Inizializza il device
WAIT Asse:st_init             ;Attendi che il device sia inizializzato
CNTUNLOCK Asse                ;Sblocca acquisizione posizione
WAIT NOT Asse:st_cntlock      ;Attendi che l'acquisizione della posizione sia sbloccato
CNTDIR Asse                   ;Imposta il senso dell'acquisizione di posizione
WAIT NOT Asse:st_cntrev       ;Attendi che sia impostato il senso dell'acquisizione di posizione
REGON Asse                    ;Abilita la regolazione
WAIT NOT Asse:st_regoff       ;Attendi l'abilitazione alla regolazione
RESUME Asse                   ;Togli l'asse dallo stato di emergenza
WAIT NOT Asse:st_emrg         ;Attendi che l'asse non sia in emergenza
LOOPON Asse                   ;Aggancia loop di reazione dell'asse
WAIT Asse:st_loopon           ;Attendi che sia agganciato il loop di reazione dell'asse
IF (slVelAsse EQ 0)           ;Nel caso in cui il set di velocità dell'asse sia zero
  slVelAsse = 50              ;Imposta una velocità di posizionamento
ENDIF
IF (slQuotaPos EQ 0)          ;Nel caso in cui la quota di posizionamento dell'asse sia zero
  slQuotaPos = 2000           ;Imposta una quota di posizionamento
ENDIF
 
;-------------------------------------------------------------------------------------
; Operazioni di Posizionamento
;-------------------------------------------------------------------------------------
; ------------------------------- variabili utilizzate ------------------------------
; slVelAsse:  Variabile impostabile che rappresenta la velocità dell'asse (espressa in % della vel.max.)
; slQuotaPos: Variabile impostabile che rappresenta la quota di posizionamento dell'asse
; ---------------------------------- flag utilizzati --------------------------------
; gfMovMan:   Movimento manuale in corso
; gfMovAuto:  Movimento automatico in corso
;-------------------------------------------------------------------------------------
 
MAIN:
;-------------------------------------------------------------------------------------
; Gestione uscite
;-------------------------------------------------------------------------------------
ofToll = Asse:st_toll         ;Imposto l'uscita di tolleranza come lo stato di tolleranza
ofAxeFermo = Asse:st_still    ;Imposto l'uscita di asse fermo come lo stato di asse fermo
 
;-------------------------------------------------------------------------------------
; Gestione movimenti automatici
;-------------------------------------------------------------------------------------
IF ifStart                          ;Attende l'ingresso di START
  IF NOT gfMovMan                   ;Controlla che non ci siano movimenti manuali
    IF Asse:st_still                ;Controlla che l'asse sia fermo
      Asse:setvel=(slVelAsse*Asse:maxvel)/100 ;Imposta la velocità dell'asse
      Asse:setpos = slQuotaPos      ;Imposta la quota di posizionamento
      START Asse                    ;Esegue lo start dell'asse
      gfMovAuto = 1                 ;Segnala movimento automatico in corso
    ENDIF
  ENDIF
ENDIF
IF ifStop                           ;Attende l'ingresso di STOP
  IF NOT Asse:st_still              ;Controlla che l'asse NON sia fermo
    STOP Asse                       ;Esegue lo stop dell'asse
  ENDIF
ENDIF
IF gfMovAuto                        ;Controlla segnalazione movimento automatico in corso
  IF Asse:st_still                  ;Controlla che l'asse sia fermo
    gfMovAuto = 0                   ;Resetta stato di movimento Automatico
  ENDIF
ENDIF
 
;-------------------------------------------------------------------------------------
; Gestione movimenti manuali (JOG)
;-------------------------------------------------------------------------------------
IF ifAvMan                          ;Attende l'ingresso di movimento manuale
  IF NOT (gfMovAuto OR gfMovMan)    ;Controlla che non ci siano movimenti automatici o manuali in corso
    IF Asse:st_still                ;Controlla che l'asse sia fermo
      Asse:setvel=(slVelAsse*Asse:maxvel)/100 ;Imposta la velocità dell'asse (percentuale della velocità massima)
      MANFW Asse                    ;Avanti asse in manuale
      gfMovMan = 1                  ;Segnala movimento manuale in corso
    ENDIF
  ENDIF
ENDIF
IF ifInMan                          ;Attende l'ingresso di movimento manuale
  IF NOT (gfMovAuto OR gfMovMan)    ;Controlla che non ci siano movimenti automatici o manuali in corso
    IF Asse:st_still                ;Controlla che l'asse sia fermo
      Asse:setvel=(slVelAsse*Asse:maxvel)/100 ;Imposta la velocità dell'asse
      MANBW Asse                    ;Avanti asse in manuale
      gfMovMan = 1                  ;Segnala movimento manuale in corso
    ENDIF
  ENDIF
ENDIF
IF gfMovMan                         ;Se l'asse si muove in manuale
  IF NOT (ifAvMan OR ifInMan)       ;Se gli ingressi di avanti e indietro manuale sono OFF
    STOP Asse                       ;Ferma l'asse
    gfMovMan = 0                    ;Togli la segnalazione di asse in movimento manuale
  ENDIF
ENDIF
 
;-------------------------------------------------------------------------------------
; Operazioni finali
;-------------------------------------------------------------------------------------
WAIT 1
JUMP MAIN
END

*come calcolare measure e pulse è spiegato nel paragrafo apposito.